#!/usr/bin/env bash
# Extract command line options & value with getopt

# getopt optstring parameters
# 首先，在 optstring 中列出你要在脚本中用到的每个命令行选项字母。
# 然后，在每个需要参数值的选项字母后加一个冒号

# getopt ab:cd -a -b test1 -cd test1 test2
# -a -b test1 -c -d -- test1 test2
# optstring 定义了四个有效选项字母：a、b、c、d。冒号（:）被放在了字母b后面，因为b选项需要一个参数值。
# 注意，它会自动将 -cd 选项分成两个单独的选项，并插入双破折号来分割行中的额外参数

# set -- $(getopt -q ab:cd "$@")
# set 命令的选项之一是双破折线（--），它会将命令行参数替换成 set 命令的命令行值


#./test18.sh -ac
# getopt 命令不擅长处理带空格和引号的参数值。它会将空格当做参数分隔符，而不是根据双引号将二者当做一个参数
# ./test18.sh -a -b test1 -cd "test2 test3" test4

set -- $(getopt -q ab:cd "$@")

echo
while [ -n "$1" ]; do
	case "$1" in
	-a) echo "Found the -a option" ;;
	-b)
		param="$2"
		echo "Found the -b option, with parameter value $param"
		shift
		;;
	-c) echo "Found the -c option" ;;
	--)
		shift
		break
		;;
	*) echo "$1 is not an option" ;;
	esac
	shift
done

count=1
for param in "$@"; do
	echo "Parameter #$count: $param"
	count=$((count + 1))
done
